/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.asportoonline.business.beans;

import java.util.List;
import javax.ejb.Local;
import org.asportoonline.entities.Cliente;
import org.asportoonline.entities.Locale;




/**
 *
 * @author fe
 */
@Local
public interface LocaleManager {

    /**
     * Cerca tutti i Locali presenti nel database.
     * 
     * @return restituisce una lista contenente tutti i Locali presenti nel database; 
     * se non ce ne sono restituisce null.
     * @see Locale
     */
    List<Locale> elencoLocali();

    /**
     * Inserisce un nuovo Locale, che deve avere un nome univoco.
     * 
     * @param locale 
     * @see Locale
     */
    void inserisciLocale(Locale locale);

    /**
     * Cerca un Locale in base all'ID.
     * 
     * @param id ID del locale.
     * @return se l'ID esiste restituisce il Locale, altrimenti restituisce null.
     * @see Locale
     */
    Locale cercaLocale(long id);
    
    /**
     * Cerca un Locale in base al nome.
     * 
     * @param nome nome del locale.
     * @return se il nome esiste restituisce il Locale, altrimenti restituisce null.
     * @see Locale
     */
    Locale cercaLocale(String nome);
    
    /**
     * Recupera tutti i Locali di cui un certo Cliente (venditore) è proprietario.
     * 
     * @param c Cliente proprietario
     * @return se il Cliente esiste e possiede almeno un Locale, restituisce la lista dei Locali, altrimenti restituisce null.
     * @see Locale
     */
    List<Locale> recuperaLocaliVenditore(Cliente c);
    
    /**
     * Modifica un locale esistente.
     * 
     * @param locale 
     * @see Locale
     */
    void aggiornaLocale(Locale locale);
    
    /**
     * Recupera tutte le località in cui è presente almeno un Locale.
     * 
     * @return restituisce una lista contenente tutti i nomi delle città in cui è presente almeno un locale;
     * se non ci sono locali registrati restituisce null.
     */
    List<String> recuperaTutteLeLocalita();
    
    /**
     * Recupera tutte i locali presenti in una data città.
     * 
     * @param localita città di cui si vogliono ottenere i locali.
     * @return restituisce una lista contenente tutti i locali della città in input;
     * se non ci sono locali registrati in tale città restituisce null.
     * @see Locale
     */
    List<Locale> cercaPerLocalita(String localita);
    
    /**
     * Rimuove un locale.
     * 
     * @param locale 
     * @see Locale
     */
    void eliminaLocale(Locale locale);
}
